<%--
  Created by IntelliJ IDEA.
  User: 常肖飞先生
  Date: 2022/5/12
  Time: 17:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--
    jsp的九个内置对象
        1：request：请求对象。
        2：response：响应对象。
        3：session：会话对象
        4：application： ServletContext对象
        5：config：ServletConfig 对象
        6：exception：异常对象。需要设置当前页面是一个错误页才会提供该对象使用。
        7：out：客户端输出内容的对象。****
        8：pageContext： jsp 页面上下文对象。 ***
        9：page：页面对象，对应着this。当前servlet对象。

        记忆方式：ren ren shi a CEO  pa pa  打脸

        四个域对象：
            pageContext
            request
            session
            application
        优先使用小的保存数据。
--%>
<h2>out 对象</h2>
<%--
    out对象：JspWriter out

    out 对象和 response.getWriter() 的区别
        1: out 的类型是 JspWriter、response.getWriter() 的类型是 PrintWriter
        2：out输出到缓冲区（8KB），没有写到response中。getWriter 是直接写到 response中。
            必须等缓冲区满了，或者响应结束的时候，out输出的内容才会写出去。
            缓冲区可以提高写出的效率。
        3：out 和  response.getWriter() 尽量不要混用，如果必须混用，那么及时刷新缓冲区。
        4: 建议：jsp中使用out对象输出，servlet 中用 response.getWriter()输出。
--%>
<%
    out.println("祝愿疫情早日过去");
    out.println("祝愿疫情早日过去");
    out.println("祝愿疫情早日过去");
    out.flush();
    out.println("<br>");
    response.getWriter().println("祝愿中国的疫情早日得到控制");
    response.getWriter().println("祝愿中国的疫情早日得到控制");
%>

<%--
    pageContext 页面的上下文对象
        1：pageContext 代表了整个jsp页面。作用域就是当前页面。只能在当前页面中使用。
        作用：
            1：做为 页面 域 容器对象使用。
            2：可以获得其他的8个内置对象。

--%>
<%
    //存入数据
    pageContext.setAttribute("uname", "tom");
    //获取数据
    String uname = (String) pageContext.getAttribute("uname");
    out.println("<br>");
    out.println(uname);
    out.println("<br>");

    //删除数据
    pageContext.removeAttribute("uname");

    //可以操作其他的三个域对象  request session application
    pageContext.setAttribute("sessionData", "sessionData", pageContext.SESSION_SCOPE);
//等价于
//    session.setAttribute();
    pageContext.setAttribute("requestData", "requestData",pageContext.REQUEST_SCOPE);
//  request.setAttribute();
    pageContext.setAttribute("appData", "appData",pageContext.APPLICATION_SCOPE);
//    application.setAttribute();
//    通过pageContext   对象获取其他的三个域对象的数据
    String sessionData = (String) pageContext.getAttribute("sessionData", PageContext.SESSION_SCOPE);
    String requestData = (String) pageContext.getAttribute("requestData", PageContext.REQUEST_SCOPE);
    String appData = (String) pageContext.getAttribute("appData", PageContext.APPLICATION_SCOPE);

    out.println(sessionData);
    out.println("<br>");
    out.println(requestData);
    out.println("<br>");
    out.println(appData);
    out.println("<br>");

    //从四个域对象中获取满足条件的数据，如果有多个域的数据满足条件，返回作用域小的
    //作用域从小到大的顺序：pageContext request session application

    Object sessionData1 = pageContext.findAttribute("sessionData");
    Object requestData1 = pageContext.findAttribute("requestData");
    Object appData1 = pageContext.findAttribute("appData");

    out.println(sessionData1);
    out.println("<br>");
    out.println(requestData1);
    out.println("<br>");
    out.println(appData1);
    out.println("<br>");

    //通过pageContext 对象删除其他的域中的数据
    pageContext.removeAttribute("sessionData",PageContext.SESSION_SCOPE);
    //删除满足条件的所有的四个域对象中的数据
    pageContext.removeAttribute("key");

    //通过pageContext 获得其他的8个内置对象
    pageContext.getRequest();//请求对象
    pageContext.getPage();//页面对象，对应着this 对应当前servlet对象
    pageContext.getSession();//会话对象
    pageContext.getServletConfig();//保存XML信息
    pageContext.getResponse();//相应对象
    pageContext.getOut();//客户端输出内容对象
    pageContext.getException();//异常对象，需要设置当前页面是一个错误页，是一个错误页才会提供该对象使用


%>
</body>
</html>
